iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
Python

30 天學會用 Python pandas 和 openpyxl 處理 Excel —— 成為用 Python 處理 Excel 檔案的高手系列 第 15

使用 Python pandas 的 groupby 實現類似 Excel 樞紐分析的功能【Python 處理 Excel #15】

  • 分享至 

  • xImage
  •  

本篇文章同步發布於 使用 Python pandas 的 groupby 實現類似 Excel 樞紐分析的功能【Python 處理 Excel #15】

前言

groupby 方法是 Python pandas 中我最喜歡的一種方法,它讓使用者可以根據一個或多個欄位分組 DataFrame 資料,並且在分組同時也能夠搭配聚合函數對特定欄位進行統計分析得到最大值、最小值、平均值等結果,因此我常用 groupby 方法取代一些 Excel 樞紐分析操作。這篇文章介紹 Python pandas 的 groupby 方法。


什麼是 groupby 方法?

根據 Python pandas 的官方文件說明,groupby 方法涉及以下三種操作的組合:

  1. Split:根據指定的欄位將數據分組。
  2. Apply:對每個組別應用某些計算或函數轉換。
  3. Combine:將計算結果合併成一個新的數據結構。

這些操作使得 groupby 方法在數據分析非常實用,特別是在需要對不同類別的數據進行比較和統計。例如,可以用來計算每位客戶的訂單總數量或每個產品類別的平均價格。


什麼是聚合函數?

聚合函數 (aggregate function) 用於將多個值歸納在一起,生成一個單一的值,例如總和、平均值、計數、最小值和最大值等統計數據。在 Python pandas 中,聚合函數可以在 groupby 方法後應用,以便對每個組別進行統計分析。

pandas 提供多種內建的聚合函數,包括:

  • count():計算每個組別的數量。
  • sum():計算每個組別的總和。
  • mean():計算每個組別的平均值。
  • min():回傳每個組別的最小值。
  • max():回傳每個組別的最大值。
  • std():計算每個組別的標準差。

案例說明

example.xlsx 中有公司的訂單資料,部分資料如下:

order_id create_date customer_name product_name order_quantity unit_price
10000 2024/6/5 Amy Chen Laptop Pro 45 1000
10001 2024/6/6 Grace Liu Laptop Pro 165 1050
10002 2024/6/13 Ivy Yang Gaming Desktop 265 1200
10003 2024/6/15 David Lee Laptop Pro 120 1000
10004 2024/6/16 Amy Chen Laptop Pro 115 950
10005 2024/6/21 Amy Chen Gaming Desktop 60 1200

這個案例希望計算每位客戶的訂單總數量和平均單價。


計算每位客戶的訂單總數量和平均單價

下方程式碼使用 Python pandas 的 groupby 方法算每位客戶的訂單總數量和平均單價:

import pandas as pd

# 讀取資料
df = pd.read_excel('example.xlsx')

# 使用 groupby 計算每位客戶的訂單總數量和平均單價
grouped = df.groupby(by='customer_name').agg({
    'order_quantity': 'sum',  # 計算每位客戶的訂單總數量
    'unit_price': 'mean'      # 計算每位客戶的平均單價
})

# 顯示結果
print(grouped)

解釋

  • df.groupby(by='customer_name'):將 DataFrame 依據 customer_name 欄位的值進行分組。
  • .agg({...}):對每個分組進行聚合計算。這裡的字典指定了對 order_quantity 欄位使用 sum 計算總和,對 unit_price 欄位使用 mean 計算平均值。
  • 在 pandas 的 groupby 操作中,可以用字串形式或函數形式指定聚合函數。當聚合函數以字串形式表示時 (例如 'mean'),這是因為 pandas 需要在其內部尋找對應的函數執行聚合操作。

groupby 方法和 agg 方法的關係

groupby 方法用於將數據按照指定的欄位進行分組,形成一個 DataFrameGroupBySeriesGroupBy 物件。這個物件包含了分組資訊,但沒有進行聚合計算。 而 agg 方法則是在 groupby 方法的基礎上,對每個分組應用聚合函數,進而計算出每個分組的聚合結果。


總結

  • groupby 方法適合用於數據分組和針對分組產生統計數據。
  • agg 方法定義對每個分組的計算方式。

本篇文章同步發布於 使用 Python pandas 的 groupby 實現類似 Excel 樞紐分析的功能【Python 處理 Excel #15】


上一篇
Python pandas 使用 concat 將不同 DataFrame 垂直連接在一起【Python 處理 Excel #14】
下一篇
Python pandas 使用 rank 得到排名【Python 處理 Excel #16】
系列文
30 天學會用 Python pandas 和 openpyxl 處理 Excel —— 成為用 Python 處理 Excel 檔案的高手27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言